package com.leyou.trade.service.impl;

import com.leyou.common.exception.LyException;
import com.leyou.trade.entity.CartItem;
import com.leyou.trade.repository.CartRepository;
import com.leyou.trade.service.CartService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

/**
 * <h3>leyou-project</h3>
 * <p></p>
 *
 * @author : hhw
 * @date : 2020-06-08 15:13
 **/
@Service
public class CartServiceImpl implements CartService {

    @Autowired
    private CartRepository repository;

    @Override
    public void saveCartItem(CartItem cartItem) {
        /**
         * 将商品存入
         */
       saveOrUpdateCartItem(cartItem);
        repository.save(cartItem);
    }
    @Override
    public List<CartItem> queryCartList() {
        return repository.findAll();
    }

    @Override
    public void updateNum(Long skuId, Integer num) {

        Optional<CartItem> result = repository.findById(skuId);
        if (!result.isPresent()) {
            throw new LyException(400, "商品不存在");
        }
        CartItem cartItem = result.get();
        cartItem.setNum(num);
        repository.save(cartItem);

    }
    @Override
    public void deleteCart(Long skuId) {
        repository.deleteById(skuId);
    }

    @Override
    public void addCartItemList(List<CartItem> itemList) {
        List<CartItem> cartItems = itemList.stream().map(this::saveOrUpdateCartItem).collect(Collectors.toList());
        repository.saveAll(cartItems);

    }

    public CartItem saveOrUpdateCartItem(CartItem cartItem) {
        Optional<CartItem> result = repository.findById(cartItem.getSkuId());
        if (result.isPresent()) {
            CartItem cartItem1 = result.get();
            cartItem.setNum(cartItem1.getNum() + cartItem.getNum());
        }
        return cartItem;
    }
}
